﻿
#include "Engine/common.h"
#include "DNF定义.h"
#include "DNF对象定义.h"
#include "strid.h"
#include "设置模块.h"
#include "AppUI.h"

int 获取装备对象索引(int 部位,int 装备区索引);	//UI装备区.cpp
int 获取护石对应技能索引(int 技能区索引);	//UI技能区.cpp
int 获取符文对应技能索引(int 技能区索引);	//UI技能区.cpp

void 构建武器对象()
{
	int 装备区索引=GetIndexSetting(设置_武器);
	int 装备对象索引=获取装备对象索引(武器,装备区索引);
	DNF武器对象* 武器对象=当前角色对象->武器动态对象;
	if (装备区索引==0)
	{
		武器对象->空装备=TRUE;
		武器对象->武器系列=(DNF武器系列)-1;
		武器对象->装备索引=装备对象索引;
		武器对象->武器类型=武器_未知;
		武器对象->雾神武器=FALSE;
		武器对象->攻强成长倍率=1.0f;
	}
	else
	{
		float 攻强成长倍率_固定武器=攻强成长神40/攻强成长标80;
		float 攻强成长倍率_领域之主武器=攻强成长标70/攻强成长神60;
		float 攻强成长倍率_雾神武器=1.0f;
		武器对象->空装备=FALSE;
		装备区索引-=1;
		int 武器系列=装备区索引%14;
		int 武器类型=装备区索引/14+1;	//0对应[武器_未知]
		if (武器系列>=焰_浴火之厄武器系列 && 武器系列<=跨越之忆武器系列)	//雾神武器升级会影响品质
		{
			int 星团等级=GetIndexSetting(设置_武器星团等级)+1;
			int 记忆等级=GetIndexSetting(设置_武器记忆等级);
			if (星团等级<20 && 记忆等级<6)
				武器对象->品质=史诗;
			else if (星团等级==20 && 记忆等级<6)
				武器对象->品质=史诗Plus;
			else if (星团等级<20 && 记忆等级==6)
				武器对象->品质=太初Lite;
			else if (星团等级==20 && 记忆等级==6)
				武器对象->品质=太初;
			武器对象->雾神武器=TRUE;
			武器对象->攻强成长倍率=1.0f;
			if (武器系列==失衡_崩离边界武器系列)	//等价于CP升神40
				武器对象->攻强成长倍率=攻强成长倍率_固定武器;
			else if (武器系列==跨越之忆武器系列)	//等价于领域之主标70
				武器对象->攻强成长倍率=攻强成长倍率_领域之主武器;
		}
		else if (武器系列==领域之主武器系列)
		{
			武器对象->品质=传说;
			武器对象->雾神武器=FALSE;
			武器对象->攻强成长倍率=攻强成长倍率_领域之主武器;
		}
		else
		{
			武器对象->品质=史诗;
			武器对象->雾神武器=FALSE;
			武器对象->攻强成长倍率=攻强成长倍率_固定武器;
		}
		武器对象->武器系列=(DNF武器系列)武器系列;
		if (当前职业对象->职业==职业_光明骑士女)
			武器对象->武器类型=(DNF武器类型)武器类型;
		else if (当前职业对象->职业==职业_流浪武士)
			武器对象->武器类型=(DNF武器类型)(武器类型+5);
		武器对象->装备索引=装备对象索引;	//图标，描述等可能会用到
	}
}

void 设置武器贴膜(int 装备区索引)
{
	if (装备区索引==0)
	{
		当前角色对象->使用武器贴膜=FALSE;
		return ;
	}
	else
	{
		int 武器装备区索引=GetIndexSetting(设置_武器);
		int 武器系列=武器装备区索引%14;
		if (武器系列>=焰_浴火之厄武器系列 && 武器系列<=跨越之忆武器系列)
			当前角色对象->使用武器贴膜=FALSE;
		else
			当前角色对象->使用武器贴膜=TRUE;	//只有选择了武器贴膜，且没选雾神武器，才会应用武器贴膜
	}
}

void 设置收集箱属性()
{
	int 类型=GetIndexSetting(设置_收集箱类型);
	int 稀有数量=GetIndexSetting(设置_收集箱稀有数量);
	int 神器数量=GetIndexSetting(设置_收集箱神器数量);
	if (类型==0)	//无
	{
		当前角色对象->收集箱三攻=0;
		当前角色对象->收集箱属强=0;
		当前角色对象->收集箱四维=0;
	}
	else if (类型==1)	//2023春节套
	{
		当前角色对象->收集箱三攻=10*稀有数量;
		当前角色对象->收集箱属强=2*神器数量;
		当前角色对象->收集箱四维=10*神器数量;
	}
	else if (类型==2)	//2023夏日套
	{
		当前角色对象->收集箱三攻=5*稀有数量;
		当前角色对象->收集箱属强=1*神器数量;
		当前角色对象->收集箱四维=5*神器数量;
	}
	else if (类型==3)	//2024春节套
	{
		当前角色对象->收集箱三攻=15*稀有数量;
		当前角色对象->收集箱属强=3*神器数量;
		当前角色对象->收集箱四维=15*神器数量;
	}
	else if (类型==4)	//2024夏日套
	{
		当前角色对象->收集箱三攻=10*稀有数量;
		当前角色对象->收集箱属强=2*神器数量;
		当前角色对象->收集箱四维=10*神器数量;
	}
}



void UpdateSettingToCalcModule()
{
	for (int SettingIndex=0;SettingIndex<DNF设置项总数;SettingIndex++)
	{
		if (GetSettingChangeState(SettingIndex)==0)
			continue;
		int Index=GetIndexSetting(SettingIndex);
		float Value=GetValueSettingRaw(SettingIndex);
		if (SettingIndex>=设置_上衣 && SettingIndex<=设置_宠物)
		{
			int 部位=SettingIndex-设置_上衣;
			if (部位==武器)
			{
				构建武器对象();
			}
			else
			{
				int 装备对象索引=获取装备对象索引(部位,Index);
				当前角色对象->角色装备[部位]=(装备对象表[装备类])[装备对象索引];
			}
		}
		else if (SettingIndex>=设置_上衣贴膜 && SettingIndex<=设置_武器贴膜)
		{
			//武器贴膜只需要实现光杖和光剑，其余以NULL占位；无武器时也可以有贴膜，但是不会用
			int 部位=SettingIndex-设置_上衣;
			if (部位==武器贴膜)
			{
				设置武器贴膜(Index);
			}
			else
			{
				int 装备对象索引=获取装备对象索引(部位,Index);
				当前角色对象->角色装备[部位]=(装备对象表[装备类])[装备对象索引];
			}
		}
		else if (SettingIndex>=设置_上衣强化类型 && SettingIndex<=设置_武器强化类型)
		{
			int 部位=SettingIndex-设置_上衣强化类型;
			当前角色对象->装备强化类型[部位]=Index;
		}
		else if (SettingIndex>=设置_上衣强化等级 && SettingIndex<=设置_武器强化等级)
		{
			int 部位=SettingIndex-设置_上衣强化等级;
			当前角色对象->装备强化等级[部位]=Index;
		}
		else if (SettingIndex==设置_武器锻造等级)
		{
			当前角色对象->武器锻造等级=Index;
		}
		else if (SettingIndex>=设置_上衣附魔 && SettingIndex<=设置_宠物附魔)
		{
			int 部位=SettingIndex-设置_上衣附魔;
			//Index是打造区索引，按部位分的，必须还原成对象索引
			//由于使用名字加入UI，这里直接用UI对应的文本查找对象
			WCHAR* 附魔名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[附魔类]).find(附魔名称));
			if (it!=(装备对象表_名称[附魔类]).end())
				当前角色对象->角色附魔[部位]=it->second;
		}
		else if (SettingIndex>=设置_上衣徽章1 && SettingIndex<=设置_戒指徽章1)
		{
			int 部位=SettingIndex-设置_上衣徽章1;
			//Index是打造区索引，按部位分的，必须还原成对象索引
			//由于使用名字加入UI，这里直接用UI对应的文本查找对象
			WCHAR* 徽章名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[徽章类]).find(徽章名称));
			if (it!=(装备对象表_名称[徽章类]).end())
				当前角色对象->角色徽章1[部位]=it->second;
		}
		else if (SettingIndex==设置_左槽徽章1 || SettingIndex==设置_右槽徽章1)
		{
			int 部位=SettingIndex-设置_上衣徽章1;
			//Index是打造区索引，按部位分的，必须还原成对象索引
			//由于使用名字加入UI，这里直接用UI对应的文本查找对象
			//白金徽章的名字特殊，加入时使用职业技能名，而创建的对象名有前缀"白金徽章-"（无徽章和闪耀徽章除外）
			WCHAR* 徽章名称=GetCurrSelText(SettingIndex);
			WCHAR 徽章完整名称[100];
			if (Index>=2)
				swprintf(徽章完整名称,L"白金徽章-%s",徽章名称);
			else
				wcscpy(徽章完整名称,徽章名称);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[徽章类]).find(徽章完整名称));
			if (it!=(装备对象表_名称[徽章类]).end())
				当前角色对象->角色徽章1[部位]=it->second;
		}
		else if (SettingIndex>=设置_上衣徽章2 && SettingIndex<=设置_戒指徽章2)
		{
			int 部位=SettingIndex-设置_上衣徽章2;
			//Index是打造区索引，按部位分的，必须还原成对象索引
			//由于使用名字加入UI，这里直接用UI对应的文本查找对象
			WCHAR* 徽章名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[徽章类]).find(徽章名称));
			if (it!=(装备对象表_名称[徽章类]).end())
				当前角色对象->角色徽章2[部位]=it->second;
		}
		else if (SettingIndex>=设置_上衣词条1 && SettingIndex<=设置_武器词条4)
		{
			int 部位=(SettingIndex-设置_上衣词条1)/4;
			int 序号=(SettingIndex-设置_上衣词条1)%4;
			DNF装备对象* 词条对象=(装备对象表[词条类])[0];	//空词条在索引0
			if (Index!=-1)
			{
				//空词条*1，普通词条96*12，武器词条*80，武器龙焰词条*80，传说词条*44
				int 词条对象索引=1+部位*96+Index;	//ListBox记录的直接就是Id，每部位从0开始，词条数均为96
				词条对象=(装备对象表[词条类])[词条对象索引];				
			}
			if (序号==0)
				当前角色对象->角色装备词条1[部位]=词条对象;
			else if (序号==1)
				当前角色对象->角色装备词条2[部位]=词条对象;
			else if (序号==2)
				当前角色对象->角色装备词条3[部位]=词条对象;
			else if (序号==3)
				当前角色对象->角色装备词条4[部位]=词条对象;	
		}
		else if (SettingIndex>=设置_武器融合词条1 && SettingIndex<=设置_武器融合词条3)
		{
			int 序号=SettingIndex-设置_武器融合词条1;
			DNF装备对象* 词条对象=(装备对象表[词条类])[0];
			if (Index!=-1)
			{
				//空词条*1，普通词条96*12，武器词条*80，武器龙焰词条*80，传说词条*44
				if (SettingIndex!=设置_武器融合词条3)
				{
					int 词条对象索引=1+12*96+Index;
					词条对象=(装备对象表[词条类])[词条对象索引];
				}
				else
				{
					int 词条对象索引=1+12*96+80+Index;
					词条对象=(装备对象表[词条类])[词条对象索引];
				}
			}
			当前角色对象->武器融合词条[序号]=词条对象;
		}
		else if (SettingIndex>=设置_左槽融合词条1 && SettingIndex<=设置_耳环融合词条3)
		{
			int 部位=(SettingIndex-设置_左槽融合词条1)/3;
			int 序号=(SettingIndex-设置_左槽融合词条1)%3;
			DNF装备对象* 词条对象=(装备对象表[词条类])[0];
			if (Index!=-1)
			{
				//空词条*1，普通词条96*12，武器词条*80，武器龙焰词条*80，传说词条*44
				int 词条对象索引=1+12*96+80*2+Index;	//3个部位都一样
				词条对象=(装备对象表[词条类])[词条对象索引];	
			}
			当前角色对象->传说融合词条[部位*3+序号]=词条对象;
		}
		else if (SettingIndex>=设置_手镯融合升级 && SettingIndex<=设置_耳环融合升级)
		{
			int 部位=SettingIndex-设置_手镯融合升级;
			当前角色对象->贴膜升级[部位]=Index;
		}
		else if (SettingIndex==设置_武器星团等级)
		{
			当前角色对象->武器星团等级=Index+1;	//UI的星团从1级开始
			构建武器对象();	//星团20影响武器品质
		}
		else if (SettingIndex==设置_武器梦境等级)
		{
			当前角色对象->武器梦境等级=Index;
		}
		else if (SettingIndex==设置_武器记忆等级)
		{
			当前角色对象->武器记忆等级=Index;
			构建武器对象();	//记忆6影响武器品质
		}
		else if (SettingIndex>=设置_装扮头部品质 && SettingIndex<=设置_装扮鞋子品质)
		{
			DNF装扮对象* 装扮对象=当前角色对象->装扮动态对象;
			int 部位=SettingIndex-设置_装扮头部品质;
			int Index2=-1;	//上衣技能单独处理
			if (部位!=装扮上衣)
				Index2=GetIndexSetting(设置_装扮头部属性+部位);
			装扮对象->设置装扮参数((DNF装扮部位)部位,Index,Index2);
		}
		else if (SettingIndex>=设置_装扮头部属性 && SettingIndex<=设置_装扮鞋子属性)
		{
			DNF装扮对象* 装扮对象=当前角色对象->装扮动态对象;
			int 部位=SettingIndex-设置_装扮头部属性;
			if (部位==装扮上衣)
			{
				WCHAR* 技能名称=GetCurrSelText(SettingIndex);
				装扮对象->设置上衣技能(技能名称);
			}
			else
			{
				int Index2=GetIndexSetting(设置_装扮头部品质+部位);
				装扮对象->设置装扮参数((DNF装扮部位)部位,Index2,Index);
			}
		}
		else if (SettingIndex==设置_武器装扮)
		{
			//武器装扮单独存放，索引从0开始
			当前角色对象->武器装扮=(装备对象表[武器装扮类])[Index];
		}
		else if (SettingIndex==设置_皮肤)
		{
			//皮肤单独存放，索引从0开始
			当前角色对象->皮肤=(装备对象表[皮肤类])[Index];
		}
		else if (SettingIndex==设置_光环)
		{
			//光环单独存放，索引从0开始
			当前角色对象->光环=(装备对象表[光环类])[Index];
		}
		else if (SettingIndex==设置_武器装扮徽章1 || SettingIndex==设置_武器装扮徽章2)
		{
			int 序号=SettingIndex-设置_武器装扮徽章1;	
			WCHAR* 徽章名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[徽章类]).find(徽章名称));
			if (it!=(装备对象表_名称[徽章类]).end())
				当前角色对象->武器装扮徽章[序号]=it->second;
		}
		else if (SettingIndex==设置_皮肤徽章1 || SettingIndex==设置_皮肤徽章2)
		{
			int 序号=SettingIndex-设置_皮肤徽章1;
			WCHAR* 徽章名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[徽章类]).find(徽章名称));
			if (it!=(装备对象表_名称[徽章类]).end())
				当前角色对象->皮肤徽章[序号]=it->second;
		}
		else if (SettingIndex==设置_光环徽章1 || SettingIndex==设置_光环徽章2)
		{
			int 序号=SettingIndex-设置_光环徽章1;
			WCHAR* 徽章名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[徽章类]).find(徽章名称));
			if (it!=(装备对象表_名称[徽章类]).end())
				当前角色对象->光环徽章[序号]=it->second;
		}
		else if (SettingIndex>=设置_辟邪玉词条1 && SettingIndex<=设置_辟邪玉词条4)
		{
			DNF辟邪玉对象* 辟邪玉对象=当前角色对象->辟邪玉动态对象;
			int 序号=SettingIndex-设置_辟邪玉词条1;
			float Value2=GetValueSettingRaw(设置_辟邪玉词条1属性+序号);
			辟邪玉对象->设置辟邪玉参数(序号,Index,Value2);
		}
		else if (SettingIndex>=设置_辟邪玉词条1属性 && SettingIndex<=设置_辟邪玉词条4属性)
		{
			DNF辟邪玉对象* 辟邪玉对象=当前角色对象->辟邪玉动态对象;
			int 序号=SettingIndex-设置_辟邪玉词条1属性;
			int Index2=GetIndexSetting(设置_辟邪玉词条1+序号);
			辟邪玉对象->设置辟邪玉参数(序号,Index2,Value);
		}
		else if (SettingIndex==设置_星辰百变数量)
		{
			当前角色对象->星辰百变数量=Index;
		}
		else if (SettingIndex==设置_跨越之忆星团)
		{
			当前角色对象->跨越之忆星团=Index+焰_浴火之厄武器系列;
		}
		else if (SettingIndex==设置_副武器状态)
		{
			当前角色对象->副武器状态=Index;
		}
		else if (SettingIndex==设置_副武器强化)
		{
			当前角色对象->副武器强化=Index;
		}
		else if (SettingIndex==设置_红色宠物装备)
		{
			WCHAR* 名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[宠物装备类]).find(名称));
			if (it!=(装备对象表_名称[宠物装备类]).end())
				当前角色对象->红色宠物装备=it->second;
		}
		else if (SettingIndex==设置_蓝色宠物装备)
		{
			WCHAR* 名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[宠物装备类]).find(名称));
			if (it!=(装备对象表_名称[宠物装备类]).end())
				当前角色对象->蓝色宠物装备=it->second;
		}
		else if (SettingIndex==设置_绿色宠物装备)
		{
			WCHAR* 名称=GetCurrSelText(SettingIndex);
			std::map<WCHAR*,DNF装备对象*,wstrless_t>::iterator it=((装备对象表_名称[宠物装备类]).find(名称));
			if (it!=(装备对象表_名称[宠物装备类]).end())
				当前角色对象->绿色宠物装备=it->second;
		}
		else if (SettingIndex==设置_快捷栏装备)
		{
			//快捷栏装备单独存放，索引从0开始
			当前角色对象->快捷栏装备=(装备对象表[快捷栏装备类])[Index];
		}
		else if (SettingIndex==设置_勋章品质)
		{
			当前角色对象->勋章品质=(DNF品质)Index;
		}
		else if (SettingIndex==设置_勋章强化)
		{
			当前角色对象->勋章强化=(DNF品质)Index;
		}
		else if (SettingIndex>=设置_守护珠1品质 && SettingIndex<=设置_守护珠4品质)
		{
			int 序号=SettingIndex-设置_守护珠1品质;
			当前角色对象->守护珠品质[序号]=(DNF品质)Index;
		}
		else if (SettingIndex==设置_冒险团等级)
		{
			当前角色对象->冒险团等级=Index+1;	//没有0级
		}
		else if (SettingIndex==设置_公会属性)
		{
			if (Index==0)
				当前角色对象->公会属性四维=0;
			else if (Index==1)
				当前角色对象->公会属性四维=60;
			else if (Index==2)
				当前角色对象->公会属性四维=120;
		}
		else if (SettingIndex==设置_公会训练官属性1)
		{
			if (Index==0)
			{
				当前角色对象->公会训练官四维=0;
				当前角色对象->公会训练官三攻=0;
			}
			else if (Index==1)
			{
				当前角色对象->公会训练官四维=40;
				当前角色对象->公会训练官三攻=25;
			}
			else if (Index==2)
			{
				当前角色对象->公会训练官四维=50;
				当前角色对象->公会训练官三攻=30;
			}
			else if (Index==3)
			{
				当前角色对象->公会训练官四维=60;
				当前角色对象->公会训练官三攻=35;
			}
			else if (Index==4)
			{
				当前角色对象->公会训练官四维=80;
				当前角色对象->公会训练官三攻=50;
			}
		}
		else if (SettingIndex==设置_公会训练官属性2)
		{
			if (Index==0)
				当前角色对象->公会训练官三速=0;
			else if (Index==1)
				当前角色对象->公会训练官三速=PC(1);
			else if (Index==2)
				当前角色对象->公会训练官三速=PC(2);
			else if (Index==3)
				当前角色对象->公会训练官三速=PC(3);
			else if (Index==4)
				当前角色对象->公会训练官三速=PC(4);
		}
		else if (SettingIndex==设置_婚房属性)
		{
			if (Index==0)
			{
				当前角色对象->结婚属强=0;
				当前角色对象->结婚物攻=0;
				当前角色对象->结婚魔攻=0;
				当前角色对象->结婚独立=0;
			}
			else if (Index==1)
			{
				当前角色对象->结婚属强=1;
				当前角色对象->结婚物攻=0;
				当前角色对象->结婚魔攻=0;
				当前角色对象->结婚独立=0;
			}
			else if (Index==2)
			{
				当前角色对象->结婚属强=3;
				当前角色对象->结婚物攻=0;
				当前角色对象->结婚魔攻=0;
				当前角色对象->结婚独立=0;
			}
			else if (Index==3)
			{
				当前角色对象->结婚属强=5;
				当前角色对象->结婚物攻=5;
				当前角色对象->结婚魔攻=5;
				当前角色对象->结婚独立=5;
			}
			else if (Index==4)
			{
				当前角色对象->结婚属强=8;
				当前角色对象->结婚物攻=10;
				当前角色对象->结婚魔攻=10;
				当前角色对象->结婚独立=20;
			}
		}
		else if (SettingIndex==设置_婚戒属性)
		{
			if (Index==0)
			{
				当前角色对象->结婚力智=0;
				当前角色对象->结婚攻速=PC(0);
				当前角色对象->结婚施放=PC(0);
				当前角色对象->结婚移速=PC(0);
			}
			else if (Index==1)
			{
				当前角色对象->结婚力智=0;
				当前角色对象->结婚攻速=PC(0);
				当前角色对象->结婚施放=PC(0);
				当前角色对象->结婚移速=PC(0);
			}
			else if (Index==2)
			{
				当前角色对象->结婚力智=15;
				当前角色对象->结婚攻速=PC(0);
				当前角色对象->结婚施放=PC(0);
				当前角色对象->结婚移速=PC(0);
			}
			else if (Index==3)
			{
				当前角色对象->结婚力智=15;
				当前角色对象->结婚攻速=PC(0);
				当前角色对象->结婚施放=PC(0);
				当前角色对象->结婚移速=PC(2);
			}
			else if (Index==4)
			{
				当前角色对象->结婚力智=15;
				当前角色对象->结婚攻速=PC(2);
				当前角色对象->结婚施放=PC(2);
				当前角色对象->结婚移速=PC(2);
			}
		}
		else if (SettingIndex==设置_晶体契约)
		{
			if (Index==0)
				当前角色对象->晶体契约三攻=0;
			else if (Index==1)
				当前角色对象->晶体契约三攻=40;
		}
		else if (SettingIndex==设置_名称装饰卡)
		{
			if (Index==0)
			{
				当前角色对象->名称装饰卡四维=0;
				当前角色对象->名称装饰卡三速=0;
			}
			else if (Index==1)
			{
				当前角色对象->名称装饰卡四维=3;
				当前角色对象->名称装饰卡三速=PC(1);
			}
		}
		else if (SettingIndex>=设置_收集箱类型 && SettingIndex<=设置_收集箱神器数量)
		{
			设置收集箱属性();
		}
		else if (SettingIndex>=设置_辅助力智加成 && SettingIndex<=设置_技攻补正)
		{
			float v1=GetValueSettingRaw(设置_辅助力智加成);
			float v2=GetValueSettingRaw(设置_辅助三攻加成);
			float v3=GetValueSettingRaw(设置_辅助技攻加成);
			if (!fequal(v1,0) && !fequal(v2,0))
				当前角色对象->适用辅助补正=TRUE;
			else
				当前角色对象->适用辅助补正=FALSE;
			float v4=GetValueSettingRaw(设置_四维补正);
			float v5=GetValueSettingRaw(设置_三攻补正);
			float v6=GetValueSettingRaw(设置_技攻补正);
			//合并辅助属性
			当前角色对象->四维补正=v1+v4;
			当前角色对象->三攻补正=v2+v5;
			当前角色对象->技攻补正=(1.0f+v3)*(1.0f+v6)-1.0f;
		}
		else if (SettingIndex==设置_攻击强化补正)
		{
			//补正项其实可以限制下范围
			当前角色对象->攻击强化补正=Value;
		}
		else if (SettingIndex==设置_攻击强化增幅补正)
		{
			当前角色对象->攻击强化增幅补正=Value;
		}
		else if (SettingIndex>=设置_火强补正 && SettingIndex<=设置_暗强补正)
		{
			int 索引=SettingIndex-设置_火强补正;
			当前角色对象->属强补正[索引]=Value;
		}
		else if (SettingIndex>=设置_火抗补正 && SettingIndex<=设置_暗抗补正)
		{
			int 索引=SettingIndex-设置_火抗补正;
			当前角色对象->属抗补正[索引]=Value;
		}
		else if (SettingIndex>=设置_异常状态1补正 && SettingIndex<=设置_异常状态13补正)
		{
			int 索引=SettingIndex-设置_异常状态1补正;
			当前角色对象->异抗补正[索引]=Value;
		}
		else if (SettingIndex==设置_攻速补正)
		{
			当前角色对象->攻速补正=Value;
		}
		else if (SettingIndex==设置_技能范围补正)
		{
			当前角色对象->技能范围补正=Value;
		}
		else if (SettingIndex==设置_MP消耗量补正)
		{
			当前角色对象->MP消耗量补正=Value;
		}
		else if (SettingIndex==设置_特性类型)
		{
			当前角色对象->特性类型=Index;
		}
		else if (SettingIndex>=设置_特性1等级 && SettingIndex<=设置_特性14等级)
		{
			int 索引=SettingIndex-设置_特性1等级;
			当前角色对象->特性等级[索引]=Index;
		}
		else if (SettingIndex>=设置_主动技能1等级 && SettingIndex<=设置_主动技能20等级)
		{
			int 索引=SettingIndex-设置_主动技能1等级;
			当前角色对象->技能等级[索引]=Index;
		}
		else if (SettingIndex>=设置_主动技能1TP等级 && SettingIndex<=设置_主动技能20TP等级)
		{
			int 索引=SettingIndex-设置_主动技能1TP等级;
			当前角色对象->技能TP等级[索引]=Index;
		}
		else if (SettingIndex>=设置_主动技能1次数 && SettingIndex<=设置_主动技能20手搓次数)
		{
			int 索引=SettingIndex-设置_主动技能1手搓次数;
			if (SettingIndex<=设置_主动技能20次数)
				索引=SettingIndex-设置_主动技能1次数;
			else if (SettingIndex<=设置_主动技能20宠物次数)
				索引=SettingIndex-设置_主动技能1宠物次数;
			int 次数=(int)GetValueSettingRaw(设置_主动技能1次数+索引);
			int 宠物次数=(int)GetValueSettingRaw(设置_主动技能1宠物次数+索引);
			int 手搓次数=(int)GetValueSettingRaw(设置_主动技能1手搓次数+索引);
			if (宠物次数>次数)
				宠物次数=次数;
			if (手搓次数>次数)
				手搓次数=次数;
			当前角色对象->技能次数[索引]=次数;
			当前角色对象->技能受宠物加成次数[索引]=宠物次数;
			当前角色对象->技能受手搓加成次数[索引]=手搓次数;
		}
		else if (SettingIndex>=设置_主动技能1手搓方向键数量 && SettingIndex<=设置_主动技能20手搓方向键数量)
		{
			int 索引=SettingIndex-设置_主动技能1手搓方向键数量;
			当前角色对象->技能手搓方向键数量[索引]=Index;
		}
		else if (SettingIndex>=设置_主动技能1在快捷栏 && SettingIndex<=设置_主动技能20在快捷栏)
		{
			int 索引=SettingIndex-设置_主动技能1在快捷栏;
			当前角色对象->技能在快捷栏里[索引]=Index;
			int 空位=14;
			for (int i=0;i<当前职业对象->主动技能数量;i++)
			{
				BOOL x=GetIndexSetting(设置_主动技能1在快捷栏+i);
				if (x) 空位--;
			}
			if (空位<0) 空位=0;
			当前角色对象->技能快捷栏空位=空位;
		}
		else if (SettingIndex>=设置_被动技能1等级 && SettingIndex<=设置_被动技能10等级)
		{
			int 索引=SettingIndex-设置_被动技能1等级;
			当前角色对象->技能等级[当前职业对象->被动技能索引+索引]=Index;	//主动和被动放在一起，被动在后面
		}
		else if (SettingIndex==设置_职业Buff技能提升率)
		{
			当前角色对象->职业BUFF提升=Value;
		}
		else if (SettingIndex>=设置_护石1 && SettingIndex<=设置_护石3)
		{
			//旧索引被覆盖，没法恢复FALSE，全部重设
			for (int i=0;i<当前职业对象->主动技能数量;i++)
				当前角色对象->技能使用护石[i]=FALSE;
			for (int i=0;i<3;i++)
			{
				int 护石=GetIndexSetting(设置_护石1+i);
				int 技能索引=获取护石对应技能索引(护石);
				if (技能索引!=-1)
					当前角色对象->技能使用护石[技能索引]=TRUE;
			}
		}
		else if (SettingIndex>=设置_符文1 && SettingIndex<=设置_符文9颜色)
		{
			//旧索引被覆盖，没法减少，全部重设
			for (int i=0;i<当前职业对象->主动技能数量;i++)
			{
				当前角色对象->技能符文数量[i].红色数量=0;
				当前角色对象->技能符文数量[i].蓝色数量=0;
				当前角色对象->技能符文数量[i].紫色数量=0;
				当前角色对象->技能符文数量[i].绿色数量=0;
			}
			for (int i=0;i<9;i++)
			{
				int 符文=GetIndexSetting(设置_符文1+i);
				int 符文颜色=GetIndexSetting(设置_符文1颜色+i);
				int 技能索引=获取符文对应技能索引(符文);
				if (技能索引!=-1)
				{
					//忽略黄色
					if (符文颜色==0)
						当前角色对象->技能符文数量[技能索引].红色数量++;
					else if (符文颜色==1)
						当前角色对象->技能符文数量[技能索引].蓝色数量++;
					else if (符文颜色==2)
						当前角色对象->技能符文数量[技能索引].紫色数量++;
					else if (符文颜色==3)
						当前角色对象->技能符文数量[技能索引].绿色数量++;
				}	
			}		
		}
		else if (SettingIndex==设置_奶妈特殊设置1 || SettingIndex==设置_剑帝特殊设置1)
		{
			当前角色对象->职业特殊设置[0]=Index;
		}
		else if (SettingIndex==设置_奶妈特殊设置2 || SettingIndex==设置_剑帝特殊设置2)
		{
			当前角色对象->职业特殊设置[1]=Index;
		}
		else if (SettingIndex==设置_场景)
		{
			当前角色对象->场景=(DNF场景)Index;
		}
		else if (SettingIndex==设置_怪物)
		{
			当前角色对象->怪物=(DNF怪物)Index;
		}
		else if (SettingIndex>=设置_药剂1 && SettingIndex<=设置_药剂13)
		{
			int 索引=SettingIndex-设置_药剂1;
			当前角色对象->使用药剂[索引]=Index;
		}
		else if (SettingIndex>=设置_出血触发频率 && SettingIndex<=设置_感电触发频率)
		{
			int 序号=SettingIndex-设置_出血触发频率;
			float 时间=999;
			if (Index!=0)
				时间=3-(Index-1)*0.5f;
			if (序号==0)
				当前角色对象->出血触发频率间隔=时间;
			else if (序号==1)
				当前角色对象->中毒触发频率间隔=时间;
			else if (序号==2)
				当前角色对象->灼伤触发频率间隔=时间;
			else if (序号==3)
				当前角色对象->感电触发频率间隔=时间;
		}
		else if (SettingIndex>=设置_出血层数 && SettingIndex<=设置_感电层数)
		{
			int 序号=SettingIndex-设置_出血层数;
			//没有0层
			if (序号==0)
				当前角色对象->出血层数=Index+1;
			else if (序号==1)
				当前角色对象->中毒层数=Index+1;
			else if (序号==2)
				当前角色对象->感电层数=Index+1;
		}
		else if (SettingIndex==设置_控制型异常开关)
		{
			当前角色对象->适用控制型异常=Index;
		}
		else if (SettingIndex==设置_控制型异常触发频率)
		{
			float 时间=999;
			if (Index!=0)
				时间=3-(Index-1)*0.5f;
			当前角色对象->控制型异常触发频率间隔=时间;
		}
		else if (SettingIndex==设置_HP范围)
		{
			当前角色对象->HP范围=1.0f-Index*0.1f;
		}
		else if (SettingIndex==设置_MP范围)
		{
			当前角色对象->MP范围=1.0f-Index*0.1f;
		}
		else if (SettingIndex==设置_队员数量)
		{
			//没有0
			当前角色对象->队员数量=Index+1;
		}
		else if (SettingIndex==设置_怪物数量)
		{
			//没有0
			当前角色对象->怪物数量=Index+1;
		}
		else if (SettingIndex>=设置_机械怪物 && SettingIndex<=设置_昆虫怪物)
		{
			int 序号=SettingIndex-设置_机械怪物;
			当前角色对象->怪物种族标记[序号]=Index;
		}
		else if (SettingIndex>=设置_普通敌人 && SettingIndex<=设置_非破招攻击)
		{
			int 序号=SettingIndex-设置_普通敌人;
			当前角色对象->敌人状态标记[序号]=Index;
		}
		else if (SettingIndex>=设置_自身出血状态 && SettingIndex<=设置_自身束缚状态)
		{
			int 序号=SettingIndex-设置_自身出血状态;
			当前角色对象->自身异常状态标记[序号]=Index;
		}

		else if (SettingIndex>=设置_怪物出血状态 && SettingIndex<=设置_怪物束缚状态)
		{
			int 序号=SettingIndex-设置_怪物出血状态;
			当前角色对象->敌人异常状态标记[序号]=Index;
		}

		SetSettingChangeState(SettingIndex,0);
	}
}

